import { privacyChannel } from './privacyChannel';
import { privacyChannelWeb } from './privacyChannelWeb';

export class privacyChannelOppo extends privacyChannelWeb {


    paraMap: Map<String, string> = new Map([
        ['bannerId', '2209830'],
        ['interId', '2082502'],
        ["interId2", "2108510"],
        ['videoId', '2082495'],
        // ['htId', '1951116'],
        ['ctrlId', '6790558ec8946b1700d95a59'],
        // ['gid', '674546ecc5b6582182fb7e6a'],
    ]);


    ruanzhu: string = '著作权人:南京桔柚檬网络科技有限公司\n登记号:2021SR0614117';
    companyName: string = '南京天豆互动网络科技有限公司';
    gameName: string = '最强大脑';
    exit(): void {
        this.channelObj.exitApplication({ data: 0 });
    }

    getSysInfo() {
        if (!this.sysInfo) {
            try {
                this.sysInfo = this.channelObj.getSystemInfoSync();
            } catch {

            }

        }
        return this.sysInfo;
    }

    init() {
        const me = this;
        // 
        const ctrlId = me.getPara('ctrlId');
        console.error("===> init: ctrlId: ", ctrlId);
        if (ctrlId) {
            try {
                let query = me.channelObj.getEnterOptionsSync().query;
                console.error("启动参数: ", query)
                if (query && query['fromid']) {
                    console.error("买量用户");
                    this.isBuyUser = true;
                } else {
                    console.error("不是买量用户:");
                }
            }
            catch (e) {
                console.error("买量环境错误", e)
            }
            let reqData = null
            let sid = localStorage.getItem('__sid');
            if (!sid && me.channelObj && me.channelObj.getLaunchOptionsSync) {
                const lObj = me.channelObj.getLaunchOptionsSync();
                if (lObj && lObj.scene) {
                    sid = lObj.scene;
                    localStorage.setItem('__sid', sid);
                }
            }
            if (this.isBuyUser) {
                reqData = {
                    'id': ctrlId,
                    'fromid': 1,
                }
            } else {
                reqData = {
                    'id': ctrlId
                }
            }
            console.error("请求数据: jpost ");
            //const reqData = { 'id': ctrlId, sid };
            privacyChannel.jpost('https://ga.gametdd.com/adCtrl/agd/conf', reqData, (err, re) => {
                if (err) {
                    console.error("错误: ", err);
                    return;
                }
                if ('' + re.code !== '0') {
                    console.error('返回值错误:' + JSON.stringify(re));
                    return;
                }
                me.ctrl = re.data;
                console.error('====>返回', me.ctrl);

                if (me.getCtrl('p7')) {
                    console.log('设置onHide==========>');
                    me.channelObj.onHide(() => {
                        console.log('onHide', me.videoAd);
                        if (me.videoAd) {
                            console.log('隐藏=======>出');
                            me.isVideoPlaying = true;
                            me.videoAd.show();


                        } else {
                            me.cacheVideo();
                        }
                    });
                }
            });
            setTimeout(() => {
                me.cacheVideo();
            }, 100);
        }
    }
    videoAd: any = null;
    videoOnClose: any = null;
    videoOnLoad: any = null;
    videoOnError: any = null;
    isVideoLoading: boolean = false;
    isVideoPlaying: boolean = false;

    secondVideo: boolean = false

    cacheVideo(succ = null) {
        const id = this.getPara('videoId');
        if (!id || !this.channelObj || this.isVideoLoading || this.isVideoPlaying) {
            return;
        }
        const me = this;
        console.log('缓存视频开始');
        me.isVideoLoading = true;
        me.videoAd = window['qg'].createRewardedVideoAd({
            adUnitId: id
        });
        if (me.videoOnClose) {
            me.videoAd.offLoad(me.videoOnLoad);
        } else {
            me.videoAd.offLoad();
        }
        me.videoOnLoad = () => {
            console.log('缓存视频...onLoad');
            me.isVideoLoading = false;
            succ()
        };
        me.videoAd.onLoad(me.videoOnLoad);
        if (me.videoOnError) {
            me.videoAd.offError(me.videoOnError);
        } else {
            me.videoAd.offError();
        }
        me.videoOnError = (err) => {
            console.error('缓存视频Error:' + JSON.stringify(err));
            me.videoAd = null;
            me.isVideoLoading = false;
            me.isVideoPlaying = false;
            setTimeout(() => {
                me.cacheVideo();
            }, 100);
        };
        me.videoAd.onError(me.videoOnError);
        if (me.videoOnClose) {
            me.videoAd.offClose(me.videoOnClose);
        } else {
            me.videoAd.offClose();
        }
        me.videoOnClose = (res) => {
            console.log('缓存视频关闭');
            me.videoAd = null;
            me.isVideoPlaying = false;
            me.isVideoLoading = false;
            setTimeout(() => {
                me.cacheVideo();
            }, 100);
        };
        me.videoAd.onClose(me.videoOnClose);
        me.videoAd.load();
    }

    updateVideoEvent(succ, endCall) {
        const me = this;
        if (!me.videoAd || me.isVideoPlaying) {
            return;
        }
        if (me.videoOnClose) {
            me.videoAd.offLoad(me.videoOnLoad);
        } else {
            me.videoAd.offLoad();
        }
        me.videoOnLoad = () => {
            me.isVideoPlaying = true;
            me.videoAd.show();
            me.isVideoLoading = false;
        };
        me.videoAd.onLoad(me.videoOnLoad);
        if (me.videoOnClose) {
            me.videoAd.offClose(me.videoOnClose);
        } else {
            me.videoAd.offClose();
        }
        me.videoOnClose = (res) => {
            if (res == undefined) {
                succ();
            } else {
                // 用户点击了【关闭广告】按钮
                if (res.isEnded) {
                    //看完广告,给奖励
                    succ();
                }
            }
            endCall();
        };
        me.videoAd.onClose(me.videoOnClose);
        if (me.videoOnError) {
            me.videoAd.offError(me.videoOnError);
        } else {
            me.videoAd.offError();
        }
        me.videoOnError = (err) => {
            console.error('视频Error:' + JSON.stringify(err));
            privacyChannel.toast('暂无广告');
            endCall();
        };
        me.videoAd.onError(me.videoOnError);
    }
    // showVideo(succ) {
    //     const id = this.getPara('videoId');
    //     if (!id) {
    //         return;
    //     }

    //     console.error('====>showVideo oppo');
    //     try {
    //         cc.game.pause();

    //         const rewardedAd = window['qg'].createRewardedVideoAd({
    //             posId: id,
    //         });
    //         rewardedAd.onError(err => {
    //             console.log("激励视频广告加载失败", err);
    //             cc.game.resume();
    //             privacyChannel.toast('暂无广告');
    //         });
    //         rewardedAd.onLoad(function (res) {
    //             console.log('激励视频广告加载完成-onload触发', JSON.stringify(res));
    //             rewardedAd.show().then(() => {
    //                 console.log('激励视频广告展示完成');
    //             }).catch((err) => {
    //                 console.log('激励视频广告展示失败', JSON.stringify(err));
    //                 cc.game.resume();
    //                 privacyChannel.toast('暂无广告');
    //             })
    //         })

    //         rewardedAd.onClose((res) => {
    //             cc.game.resume();
    //             console.log('视频广告关闭回调')
    //             if (res && res.isEnded) {
    //                 console.log("正常播放结束，可以下发游戏奖励");
    //                 succ();
    //             } else {
    //                 console.log("播放中途退出，不下发游戏奖励");
    //             }
    //         });

    //     } catch (e) {
    //         console.error('videoERR', e);
    //         cc.game.resume();
    //     }
    // }

    private insertAD: any = null;
    private interADMap = {};
    doShowInter(id: string, isBanner: boolean = false, style?: any) {
        console.log('doShowInter', id);
        const height = (isBanner) ? cc.view.getVisibleSize().height / 2 + 100 : cc.view.getVisibleSize().height / 2 + 230;
        const conf = {
            posId: id,
            style: {
                top: height,
            }
        }

        if (style) {
            conf.style = style;
        }
        const me = this;
        let interAd = me.channelObj.createCustomAd(conf);
        if (me.interADMap[id]) {
            id = id + 'a';
        }
        me.interADMap[id] = interAd;
        interAd.offHide();
        interAd.onHide(() => {
            interAd.destroy();
            // interAd = me.channelObj.createCustomAd(conf);
            me.interADMap[id] = null;
        });
        interAd.offError();
        interAd.onError(err => {
            console.error('原生模板广告加载失败' + JSON.stringify(err));
            me.interADMap[id] = null;
        });
        interAd.show().then(() => {
            console.log('原生模板广告展示完成');
            if (this.getCtrl("p10")) {
                setTimeout(() => {
                    interAd.destroy();
                    // interAd = me.channelObj.createCustomAd(conf);
                    me.interADMap[id] = null;
                }, 3000);
            }
        }).catch((err) => {
            console.log('原生模板广告展示失败' + JSON.stringify(err));
            me.interADMap[id] = null;
        });
    }
    showUnqiueInter(isBanner: boolean = false, style?: any) {
        const id = this.getPara('interId');
        if (!id) {
            return;
        }
        // 插屏广告弹出页面
        // 在所有二级页面概率弹出
        // 0为关闭，1为开启
        // if (!this.getCtrl('p1')) {
        //     return;
        // }
        //控制所有二级页面插屏弹出的概率,单位为百分比
        // if (Math.random() > this.getCtrl('p2') / 100) {
        //     return;
        // }
        console.error('====>showInter');

        //原生插屏延迟
        // const p3 = this.getCtrl('p3');
        const me = this;
        //setTimeout(() => {
        try {
            me.doShowUniqueInter(id, isBanner, style);
            if (this.getCtrl('p8')) {


                setTimeout(() => {
                    me.doShowInter(this.getPara('interId2'), isBanner, style);
                }, 500);
            }
        } catch (e) {
            console.error("特殊弹窗出错", e)
        }

        //}, p3 * 1000);
    }
    showInter(isBanner: boolean = false, style?: any) {
        const id = this.getPara('interId');
        if (!id) {
            return;
        }
        // 插屏广告弹出页面
        // 在所有二级页面概率弹出
        // 0为关闭，1为开启
        // if (!this.getCtrl('p1')) {
        //     return;
        // }
        //控制所有二级页面插屏弹出的概率,单位为百分比
        // if (Math.random() > this.getCtrl('p2') / 100) {
        //     return;
        // }
        console.error('====>showInter');

        //原生插屏延迟
        // const p3 = this.getCtrl('p3');
        const me = this;
        //setTimeout(() => {
        try {
            me.doShowInter(id, isBanner, style);

            if (Math.random() > this.getCtrl('p9') / 100) {
                return;
            }
            setTimeout(() => {
                me.doShowInter(this.getPara('interId2'), isBanner, style);
            }, 500);

        } catch {
            console.error("不是vivo")
        }

        //}, p3 * 1000);
    }
    showInterMainLayer(isBanner: boolean = false, style?: any) {
        const id = this.getPara('interId');
        if (!id) {
            return;
        }
        // 插屏广告弹出页面
        // 在所有二级页面概率弹出
        // 0为关闭，1为开启
        // if (!this.getCtrl('p1')) {
        //     return;
        // }
        //控制所有二级页面插屏弹出的概率,单位为百分比
        // if (Math.random() > this.getCtrl('p2') / 100) {
        //     return;
        // }
        console.error('====>showInter');

        //原生插屏延迟
        // const p3 = this.getCtrl('p3');
        const me = this;
        //setTimeout(() => {
        try {
            me.doShowInter(id, isBanner, style);

            if (this.getCtrl('p8')) {


                setTimeout(() => {
                    me.doShowInter(this.getPara('interId2'), isBanner, style);
                }, 500);
            }

        } catch {
            console.error("不是vivo")
        }

        //}, p3 * 1000);
    }

    doShowUniqueInter(id: string, isBanner: boolean = false, style?: any) {
        const height = (isBanner) ? cc.view.getVisibleSize().height / 2 : cc.view.getVisibleSize().height / 2 + 230;
        const conf = {
            posId: id,
            style: {
                top: height,
            }
        }
        if (style) {
            conf.style = style;
        }
        if (this.insertAD) {
            //不能同时显示两个
            console.error('原生板正在显示，不能重复显示');
            return;
        }
        const me = this;
        this.insertAD = me.channelObj.createCustomAd(conf);
        me.insertAD.offHide();
        me.insertAD.onHide(() => {
            console.error('原生板隐藏，删除原始板');
            cc.resources.load("kuangDian/kuangDian", cc.Prefab, (error, assert: cc.Prefab) => {
                if (error) {
                    console.error(error);
                    return;
                }
                let node = cc.instantiate(assert);
                cc.director.getScene().getChildByName('Canvas').getChildByName("UI").addChild(node);
            });
            me.insertAD.destroy();
            me.insertAD = null;
            // me.insertAD = me.channelObj.createCustomAd(conf);
        });
        // me.insertAD.offClose()
        // me.insertAD.onClose(() => {
        //     console.error('原生板删除，删除原始板');
        //     cc.resources.load("kuangDian/kuangDian", cc.Prefab, (error, assert: cc.Prefab) => {
        //         if (error) {
        //             console.error(error);
        //             return;
        //         }
        //         let node = cc.instantiate(assert);
        //         cc.director.getScene().getChildByName('Canvas').getChildByName("UI").addChild(node);
        //     });
        //     me.insertAD.destroy();
        //     me.insertAD = null;
        // })
        me.insertAD.offError();
        me.insertAD.onError(err => {
            console.error('原生模板广告加载失败' + JSON.stringify(err));
            me.insertAD = null;
        });
        me.insertAD.show().then(() => {
            console.log('原生模板广告展示完成');
        }).catch((err) => {
            console.log('原生模板广告展示失败' + JSON.stringify(err));
            me.insertAD = null;
        });
    }

    showStyleInter(id: number) {
        console.error("===>showStyleInter");
        let style = {
            top: this.getSysInfo().windowHeight / 2 + 200
        };
        this.showInter(false, style);
    }


    closeInter() {

        console.error('====>closeInter');
        if (this.insertAD) {
            this.insertAD.destroy();
        }

        this.interADMap = {}
    }

    showBanner() {
        const id = this.getPara('bannerId');
        if (!id) {
            return;
        }
        console.error('====>showBanner');
        const bannerAd = this.channelObj.createBannerAd({
            'posId': id,


        });
        bannerAd.onError(err => {
            console.log('banner广告加载失败' + JSON.stringify(err));
        });
        bannerAd.show().then(() => {
            console.log('banner广告展示完成');
        }).catch((err) => {
            console.log('banner广告展示失败' + JSON.stringify(err));
        });
        bannerAd.onHide(() => {
            console.log('banner广告隐藏');
        });
    }

    showHt() {

    }

    showVideo(succ, end = null) {
        console.error("当前平台", cc.sys.platform)
        if (cc.sys.platform == cc.sys.DESKTOP_BROWSER || cc.sys.platform == cc.sys.MOBILE_BROWSER || cc.sys.platform != cc.sys.OPPO_GAME) {
            console.error("播放广告")
            succ();
            return
        }
        const id = this.getPara('videoId');
        if (!id || !this.channelObj || this.isVideoPlaying) {
            return;
        }
        const me = this;
        function endCall() {
            me.videoAd = null;
            me.isVideoPlaying = false;
            me.isVideoLoading = false;
            cc.game.resume();
            end && end();
            setTimeout(() => {
                me.cacheVideo();
            }, 100);
        }
        if (me.isVideoLoading) {
            //正在缓存
            me.updateVideoEvent(succ, endCall);
            return;
        }
        console.error('====>showVideo oppo', id);
        try {
            // cc.game.pause();
            if (me.videoAd) {
                me.updateVideoEvent(succ, endCall);
                me.isVideoPlaying = true;
                me.videoAd.show();
                return;
            }
            me.isVideoLoading = true;
            me.videoAd = window['qg'].createRewardedVideoAd({
                adUnitId: id
            });
            me.updateVideoEvent(succ, endCall);
            me.videoAd.load();
        } catch (e) {
            console.error('videoERR', e);
            endCall();
        }
    }
    // /** 上一次custom展示时间 */
    // private lastCustomShowTime: number = 0;
    // /** customAd展示时间间隔，单位毫秒 */
    // private customGapSec: number = 5000;
    // private insertAD: any = null;

    // doShowInter(id: string, isBanner: boolean = false, style?: any) {
    //     const height = (isBanner) ? this.getSysInfo().windowHeight - 300 : this.getSysInfo().windowHeight / 2 - 260;
    //     const conf = {
    //         adUnitId: id,
    //         style: {
    //             top: height,
    //         }
    //     }
    //     if (style) {
    //         conf.style = style;
    //     }
    //     if (this.insertAD) {
    //         //不能同时显示两个
    //         console.error('原生模板正在显示，不能重复显示');
    //         return;
    //     }
    //     const me = this;
    //     this.insertAD = me.channelObj.createCustomAd(conf);
    //     me.insertAD.offHide();
    //     me.insertAD.onHide(() => {
    //         me.insertAD.destroy();
    //         me.insertAD = null;
    //         // me.insertAD = me.channelObj.createCustomAd(conf);
    //     });
    //     me.insertAD.offError();
    //     me.insertAD.onError(err => {
    //         console.error('原生模板广告加载失败' + JSON.stringify(err));
    //         me.insertAD = null;
    //     });
    //     me.insertAD.show().then(() => {
    //         console.log('原生模板广告展示完成');
    //     }).catch((err) => {
    //         console.log('原生模板广告展示失败' + JSON.stringify(err));
    //         me.insertAD = null;
    //     });
    // }

    // showInter(isBanner: boolean = false, style?: any) {
    //     const id = this.getPara('interId');
    //     if (!id) {
    //         return;
    //     }
    //     // 插屏广告弹出页面
    //     // 在所有二级页面概率弹出
    //     // 0为关闭，1为开启
    //     // if (!this.getCtrl('p1')) {
    //     //     return;
    //     // }
    //     //控制所有二级页面插屏弹出的概率,单位为百分比
    //     // if (Math.random() > this.getCtrl('p2') / 100) {
    //     //     return;
    //     // }
    //     console.error('====>showInter');

    //     //原生插屏延迟
    //     //const p3 = this.getCtrl('p3');
    //     const p3 = 0
    //     const me = this;
    //     setTimeout(() => {
    //         me.doShowInter(id, isBanner, style);
    //     }, p3 * 1000);
    // }

    // showStyleInter(id: number) {
    //     console.error("===>showStyleInter");
    //     let style = {
    //         top: this.getSysInfo().windowHeight / 2 + 200
    //     };
    //     this.showInter(false, style);
    // }


    // closeInter() {

    //     console.error('====>closeInter');
    //     if (this.insertAD) {
    //         this.insertAD.hide();
    //     }
    // }

    // kuangDian(): void {
    //     // if (!this.getCtrl('p4')) {
    //     //     return;
    //     // }
    //     // //控制宝箱连点页面插屏弹出的概率，单位为百分比
    //     // if (Math.random() > this.getCtrl('p5')/100) {
    //     //     return;
    //     // }
    //     super.kuangDian();
    // }

    // showBanner() {
    //     const id = this.getPara('bannerId');
    //     if (!id) {
    //         return;
    //     }
    //     console.error('====>showBanner');
    //     const bannerAd = this.channelObj.createBannerAd({ 'adUnitId': id });
    //     bannerAd.onError(err => {
    //         console.log('banner广告加载失败' + JSON.stringify(err));
    //     });
    //     bannerAd.show().then(() => {
    //         console.log('banner广告展示完成');
    //     }).catch((err) => {
    //         console.log('banner广告展示失败' + JSON.stringify(err));
    //     });
    //     bannerAd.onHide(() => {
    //         console.log('banner广告隐藏');
    //     });
    // }

    // showHt() {

    // }

}